<?php
/**
 * Created by PhpStorm.
 * User: zhangrxiang
 * Date: 2017/6/27
 * Time: 9:33
 * Project name: PHPTEST
 * File name: 2.php
 * @copyright Copyright (c) 2016 ZRX Software LLC
 * @license https://github.com/zhangrxiang
 * @since 1.0.0
 */

//密码散列算法函数 ¶

//password_hash — 创建密码的哈希（hash）
$pwd = password_hash("admin",PASSWORD_DEFAULT);
//$2y$10$RYMdeOPHeL/RDuhVyg66tOO5l7I9Wp20o58UewaRQDohRFPFR8DLG
echo $pwd.PHP_EOL;
//$2y$10$ZfB4Xmrm6wmjeGK/w5kxS.4jU1duGtpR8xL/B06JD9TD3UL9Q3bAW
$pwd = password_hash("admin",PASSWORD_BCRYPT);
echo $pwd.PHP_EOL;

//array(3) {
//	["algo"]=>
//  int(1)
//  ["algoName"]=>
//  string(6) "bcrypt"
//	["options"]=>
//  array(1) {
//		["cost"]=>
//    int(10)
//  }
//}
$info = password_get_info($pwd);
var_dump($info);



/**
 * 这个例子对服务器做了基准测试（benchmark），检测服务器能承受多高的 cost
 * 在不明显拖慢服务器的情况下可以设置最高的值
 * 8-10 是个不错的底线，在服务器够快的情况下，越高越好。
 * 以下代码目标为  ≤ 50 毫秒（milliseconds），
 * 适合系统处理交互登录。
 */
$timeTarget = 0.05; // 50 毫秒（milliseconds）

$cost = 8;
do {
	$cost++;
	$start = microtime(true);
	password_hash("test", PASSWORD_BCRYPT, ["cost" => $cost]);
	$end = microtime(true);
} while (($end - $start) < $timeTarget);

echo "Appropriate Cost Found: " . $cost . "\n";


if(password_verify("admin",$pwd)){
	echo "true".PHP_EOL;
	if (password_needs_rehash($pwd, PASSWORD_DEFAULT, ['cost' => 9])) {
		echo $pwd.PHP_EOL;
		echo password_hash("admin",PASSWORD_DEFAULT,['cost' => 9]).PHP_EOL;
	}
}